package org.alesv.entranceExams.web.taglib;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.tagext.TagSupport;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Imprime una URL completa a partir del nombre de una constante que contiene una URL relativa.
 */
public class UrlTag extends TagSupport {

    /**
     * El logger.
     */
    private static final Logger LOG              = LoggerFactory.getLogger(TableTag.class);

    /**
     * Identificador para la serialización.
     */
    private static final long   serialVersionUID = 4896829056236006161L;

    /**
     * Nombre de la clase que contiene las constantes con las URL.
     */
    private static final String CONSTANTS_CLASS  = "org.alesv.entranceExams.web.UrlConstants";

    /**
     * Nombre de la constante que contiene la URL relativa.
     */
    private String              constant;

    /**
     * Establece el nombre de la constante que contiene la URL relativa.
     * 
     * @param constant
     *            Nombre de la constante que contiene la URL relativa.
     */
    public final void setConstant(final String constant) {
        this.constant = constant;
    }

    @Override
    public final int doStartTag() {
        // Se obtiene el path del contexto
        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
        String contextPath = request.getContextPath();

        try {
            // Se cargan las constantes.
            Map<String, Object> constants = Utils.getClassConstants(CONSTANTS_CLASS);

            // Se imprime la URL completa
            pageContext.getOut().print(String.format("%s%s", contextPath, constants.get(constant)));
        } catch (Exception e) {
            LOG.info("Except controlled");
        }
        return EVAL_BODY_INCLUDE;
    }

}
